﻿using IM.Easy.Core.ServiceLifetime;
using IM.Easy.Core.Services;
using IM.Easy.Infrastructure.Query;
using IM.Easy.LogServices.Dtos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IM.Easy.Api.AccountManage
{
    /// <summary>
    /// 在线用户管理接口，提供管理用户连接的基本操作。
    /// </summary>
    public interface IOnlineService : ISingleton
    {

        List<UserOnlineLogDto> UserConnections { get; }
        /// <summary>
        /// 用户上线。
        /// </summary>
        /// <param name="userId">用户的唯一标识。</param>
        /// <param name="connectionId">SignalR 的连接 ID。</param>
        void Online(string userId, string connectionId);

        /// <summary>
        /// 用户下线。
        /// </summary>
        /// <param name="connectionId">SignalR 的连接 ID。</param>
        void Offline(string connectionId);

        /// <summary>
        /// 获取分页后的用户信息。
        /// </summary>
        /// <param name="query">查询参数。</param>
        /// <returns>返回分页结果。</returns>
        PageResponse<UserOnlineLogDto> GetUsers(UserOnlineLogQueryDto query);

        /// <summary>
        /// 根据 userId 获取对应的 connectionId。
        /// </summary>
        /// <param name="userId">用户的唯一标识。</param>
        /// <returns>返回第一个匹配的 connectionId，如果未找到则返回 null。</returns>
        string? GetConnectionIdByUserId(string userId);

        /// <summary>
        /// 根据 connectionId 获取对应的 userId。
        /// </summary>
        /// <param name="connectionId">SignalR 的连接 ID。</param>
        /// <returns>返回 userId，如果未找到则返回 null。</returns>
        string? GetUserIdByConnectionId(string connectionId);
    }
}
